package 系统复习.面试题.数组_字符串;

/**
 * 给定两个字符串 s 和 t ，如果它们的编辑距离为 1 ，则返回 true ，否则返回 false 。
 * 字符串 s 和字符串 t 之间满足编辑距离等于 1 有三种可能的情形：
 * 往 s 中插入 恰好一个 字符得到 t
 * 从 s 中删除 恰好一个 字符得到 t
 * 在 s 中用 一个不同的字符 替换 恰好一个 字符得到 t
 */
public class L161 {

    public boolean isOneEditDistance(String s, String t) {

        // 如果长度相等
        if (s.length() == t.length()) {
            int count = 0;
            for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) != t.charAt(i)) count++;
            }
            if (count == 1) return true;
        }
        // 长度不等
        else {
            int slength = s.length();
            int tlength = t.length();
            if (Math.abs(slength - tlength) != 1) return false;
            int index = 0;
            for (int i = 0; i < Math.min(slength, tlength); i++) {
                if (s.charAt(i) != t.charAt(i) && index == 0) {
                    index++;
                }
                if (slength < tlength) {
                    if (s.charAt(i) != t.charAt(i + index)) return false;
                } else {
                    if (s.charAt(i + index) != t.charAt(i)) return false;
                }
            }
            return true;
        }

        return false;
    }

    public static void main(String[] args) {
        L161 l161 = new L161();
        System.out.println(l161.isOneEditDistance("ab", "acb"));
    }

}
